{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "a3a2c78c-e0dc-46e6-958d-f95847061c8d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " 楼栋名称 楼层 教室数量 位置 联系电话 楼栋管理员 楼栋名称 经度 纬度\n",
      "0 逸夫人文楼 5 80 学校中部偏东 027 - 8866XXXX 李老师 逸夫人文楼 114.321000 30.550000\n",
      "1 教学一号楼 6 90 学校正门附近 027 - 8866XXXX 王老师 教学一号楼 114.322000 30.549500\n",
      "2 教学二号楼 7 100 教学一号楼西侧 027 - 8866XXXX 张老师 教学二号楼 114.321500 30.549200\n",
      "3 科技大楼 8 70 学校北部 027 - 8866XXXX 赵老师 科技大楼 114.323000 30.550500\n",
      "4 理工楼 6 75 学校西北侧 027 - 8866XXXX 孙老师 理工楼 114.320500 30.550200\n",
      "\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "df1 = pd.DataFrame({\n",
    "    '楼栋名称': ['逸夫人文楼', '教学一号楼', '教学二号楼', '科技大楼', '理工楼'],\n",
    "    '楼层': [5, 6, 7, 8, 6],\n",
    "    '教室数量': [80, 90, 100, 70, 75],\n",
    "    '位置': ['学校中部偏东', '学校正门附近', '教学一号楼西侧', '学校北部', '学校西北侧'],\n",
    "    '联系电话': ['027 - 8866XXXX', '027 - 8866XXXX', '027 - 8866XXXX', '027 - 8866XXXX', '027 - 8866XXXX'],\n",
    "    '楼栋管理员': ['李老师', '王老师', '张老师', '赵老师', '孙老师']\n",
    "})\n",
    "\n",
    "df2 = pd.DataFrame({\n",
    "    '楼栋名称': ['逸夫人文楼', '教学一号楼', '教学二号楼', '科技大楼', '理工楼'],\n",
    "    '经度': [114.3210, 114.3220, 114.3215, 114.3230, 114.3205],\n",
    "    '纬度': [30.5500, 30.5495, 30.5492, 30.5505, 30.5502]\n",
    "})\n",
    "\n",
    "# 自定义索引合并\n",
    "result = pd.concat([df1, df2], axis=1)\n",
    "\n",
    "# 创建Styler对象，并设置边框样式\n",
    "styled_df = result.style.set_table_styles([{'selector': 'table', 'props': [('border', '1px solid black')]}])\n",
    "print(styled_df.to_string())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "754d2d87-7a47-4b5d-892b-4ac448b13ec4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    楼栋名称  楼层  教室数量       位置            联系电话 楼栋管理员        经度       纬度\n",
      "0  逸夫人文楼   5    80   学校中部偏东  027 - 8866XXXX   李老师  114.3210  30.5500\n",
      "1  教学一号楼   6    90   学校正门附近  027 - 8866XXXX   王老师  114.3220  30.5495\n",
      "2  教学二号楼   7   100  教学一号楼西侧  027 - 8866XXXX   张老师  114.3215  30.5492\n",
      "3   科技大楼   8    70     学校北部  027 - 8866XXXX   赵老师  114.3230  30.5505\n",
      "4    理工楼   6    75    学校西北侧  027 - 8866XXXX   孙老师  114.3205  30.5502\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "# 假设df1和df2已经按照如下方式创建\n",
    "df1 = pd.DataFrame({\n",
    "    '楼栋名称': ['逸夫人文楼', '教学一号楼', '教学二号楼', '科技大楼', '理工楼'],\n",
    "    '楼层': [5, 6, 7, 8, 6],\n",
    "    '教室数量': [80, 90, 100, 70, 75],\n",
    "    '位置': ['学校中部偏东', '学校正门附近', '教学一号楼西侧', '学校北部', '学校西北侧'],\n",
    "    '联系电话': ['027 - 8866XXXX', '027 - 8866XXXX', '027 - 8866XXXX', '027 - 8866XXXX', '027 - 8866XXXX'],\n",
    "    '楼栋管理员': ['李老师', '王老师', '张老师', '赵老师', '孙老师']\n",
    "})\n",
    "\n",
    "df2 = pd.DataFrame({\n",
    "    '楼栋名称': ['逸夫人文楼', '教学一号楼', '教学二号楼', '科技大楼', '理工楼'],\n",
    "    '经度': [114.3210, 114.3220, 114.3215, 114.3230, 114.3205],\n",
    "    '纬度': [30.5500, 30.5495, 30.5492, 30.5505, 30.5502]\n",
    "})\n",
    "\n",
    "# 根据楼栋名称进行合并\n",
    "merged_df = pd.merge(df1, df2, on='楼栋名称')\n",
    "\n",
    "print(merged_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "03b55817-d3f7-485a-9231-36d5d6f0d3d3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    楼栋名称  楼层  教室数量       位置            联系电话        经度       纬度\n",
      "0  逸夫人文楼   5    80   学校中部偏东  027 - 8866XXXX  114.3210  30.5500\n",
      "1  教学一号楼   6    90   学校正门附近  027 - 8866XXXX  114.3220  30.5495\n",
      "2  教学二号楼   7   100  教学一号楼西侧  027 - 8866XXXX  114.3215  30.5492\n",
      "3   科技大楼   8    70     学校北部  027 - 8866XXXX  114.3230  30.5505\n",
      "4    理工楼   6    75    学校西北侧  027 - 8866XXXX  114.3205  30.5502\n"
     ]
    }
   ],
   "source": [
    "# 删除多余的name列\n",
    "merged_df.drop('楼栋管理员', axis=1, inplace=True)\n",
    "print(merged_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "e201cdca-4029-4030-a156-8411dfeb545f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>楼栋名称</th>\n",
       "      <th>楼层</th>\n",
       "      <th>教室数量</th>\n",
       "      <th>位置</th>\n",
       "      <th>联系电话</th>\n",
       "      <th>经度</th>\n",
       "      <th>纬度</th>\n",
       "      <th>geometry</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>逸夫人文楼</td>\n",
       "      <td>5</td>\n",
       "      <td>80</td>\n",
       "      <td>学校中部偏东</td>\n",
       "      <td>027 - 8866XXXX</td>\n",
       "      <td>114.3210</td>\n",
       "      <td>30.5500</td>\n",
       "      <td>POINT (114.321 30.55)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>教学一号楼</td>\n",
       "      <td>6</td>\n",
       "      <td>90</td>\n",
       "      <td>学校正门附近</td>\n",
       "      <td>027 - 8866XXXX</td>\n",
       "      <td>114.3220</td>\n",
       "      <td>30.5495</td>\n",
       "      <td>POINT (114.322 30.5495)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>教学二号楼</td>\n",
       "      <td>7</td>\n",
       "      <td>100</td>\n",
       "      <td>教学一号楼西侧</td>\n",
       "      <td>027 - 8866XXXX</td>\n",
       "      <td>114.3215</td>\n",
       "      <td>30.5492</td>\n",
       "      <td>POINT (114.3215 30.5492)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>科技大楼</td>\n",
       "      <td>8</td>\n",
       "      <td>70</td>\n",
       "      <td>学校北部</td>\n",
       "      <td>027 - 8866XXXX</td>\n",
       "      <td>114.3230</td>\n",
       "      <td>30.5505</td>\n",
       "      <td>POINT (114.323 30.5505)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>理工楼</td>\n",
       "      <td>6</td>\n",
       "      <td>75</td>\n",
       "      <td>学校西北侧</td>\n",
       "      <td>027 - 8866XXXX</td>\n",
       "      <td>114.3205</td>\n",
       "      <td>30.5502</td>\n",
       "      <td>POINT (114.3205 30.5502)</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    楼栋名称  楼层  教室数量       位置            联系电话        经度       纬度  \\\n",
       "0  逸夫人文楼   5    80   学校中部偏东  027 - 8866XXXX  114.3210  30.5500   \n",
       "1  教学一号楼   6    90   学校正门附近  027 - 8866XXXX  114.3220  30.5495   \n",
       "2  教学二号楼   7   100  教学一号楼西侧  027 - 8866XXXX  114.3215  30.5492   \n",
       "3   科技大楼   8    70     学校北部  027 - 8866XXXX  114.3230  30.5505   \n",
       "4    理工楼   6    75    学校西北侧  027 - 8866XXXX  114.3205  30.5502   \n",
       "\n",
       "                   geometry  \n",
       "0     POINT (114.321 30.55)  \n",
       "1   POINT (114.322 30.5495)  \n",
       "2  POINT (114.3215 30.5492)  \n",
       "3   POINT (114.323 30.5505)  \n",
       "4  POINT (114.3205 30.5502)  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import geopandas as gpd\n",
    "gdf = gpd.GeoDataFrame(\n",
    "    merged_df, geometry=gpd.points_from_xy(merged_df.经度, merged_df.纬度),crs='EPSG:4326')\n",
    "gdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "81640ebc-4c36-4fc9-9361-b55ab8953522",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data\\university_buildings.geojsongeojson has been done!\n"
     ]
    }
   ],
   "source": [
    "# 将GeoDataFrame保存为geojson文件\n",
    "out_json = r\"data\\university_buildings.geojson\"\n",
    "gdf.to_file(out_json, driver='GeoJSON')\n",
    "print(out_json + 'geojson has been done!')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "504b75a2-8a7e-4558-97c7-08db93a2bafe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>楼栋名称</th>\n",
       "      <th>楼层</th>\n",
       "      <th>教室数量</th>\n",
       "      <th>位置</th>\n",
       "      <th>联系电话</th>\n",
       "      <th>经度</th>\n",
       "      <th>纬度</th>\n",
       "      <th>geometry</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>逸夫人文楼</td>\n",
       "      <td>5</td>\n",
       "      <td>80</td>\n",
       "      <td>学校中部偏东</td>\n",
       "      <td>027 - 8866XXXX</td>\n",
       "      <td>114.3210</td>\n",
       "      <td>30.5500</td>\n",
       "      <td>POINT (114.321 30.55)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>教学一号楼</td>\n",
       "      <td>6</td>\n",
       "      <td>90</td>\n",
       "      <td>学校正门附近</td>\n",
       "      <td>027 - 8866XXXX</td>\n",
       "      <td>114.3220</td>\n",
       "      <td>30.5495</td>\n",
       "      <td>POINT (114.322 30.5495)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>教学二号楼</td>\n",
       "      <td>7</td>\n",
       "      <td>100</td>\n",
       "      <td>教学一号楼西侧</td>\n",
       "      <td>027 - 8866XXXX</td>\n",
       "      <td>114.3215</td>\n",
       "      <td>30.5492</td>\n",
       "      <td>POINT (114.3215 30.5492)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>科技大楼</td>\n",
       "      <td>8</td>\n",
       "      <td>70</td>\n",
       "      <td>学校北部</td>\n",
       "      <td>027 - 8866XXXX</td>\n",
       "      <td>114.3230</td>\n",
       "      <td>30.5505</td>\n",
       "      <td>POINT (114.323 30.5505)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>理工楼</td>\n",
       "      <td>6</td>\n",
       "      <td>75</td>\n",
       "      <td>学校西北侧</td>\n",
       "      <td>027 - 8866XXXX</td>\n",
       "      <td>114.3205</td>\n",
       "      <td>30.5502</td>\n",
       "      <td>POINT (114.3205 30.5502)</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    楼栋名称  楼层  教室数量       位置            联系电话        经度       纬度  \\\n",
       "0  逸夫人文楼   5    80   学校中部偏东  027 - 8866XXXX  114.3210  30.5500   \n",
       "1  教学一号楼   6    90   学校正门附近  027 - 8866XXXX  114.3220  30.5495   \n",
       "2  教学二号楼   7   100  教学一号楼西侧  027 - 8866XXXX  114.3215  30.5492   \n",
       "3   科技大楼   8    70     学校北部  027 - 8866XXXX  114.3230  30.5505   \n",
       "4    理工楼   6    75    学校西北侧  027 - 8866XXXX  114.3205  30.5502   \n",
       "\n",
       "                   geometry  \n",
       "0     POINT (114.321 30.55)  \n",
       "1   POINT (114.322 30.5495)  \n",
       "2  POINT (114.3215 30.5492)  \n",
       "3   POINT (114.323 30.5505)  \n",
       "4  POINT (114.3205 30.5502)  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "geojson_gdf = gpd.read_file(out_json)\n",
    "geojson_gdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "c773ea8e-1c6d-4f8a-b6f9-d6b69ec1ec90",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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39Njz0EiIiIiul4xIBERERHJMCARERERyTAgEREREckwIBERERHJMCARERERyTAgEREREckwIBERERHJMCARERERyTAgEREREckwIBERERHJMCARERERyTAgEREREckwIBERERHJMCARERERyTAgEREREckwIBERERHJMCARERERyTAgEREREckwIBERERHJMCARERERyTAgEREREckwIBERERHJMCARERERyTAgEREREckwIBERERHJMCARERERyTAgEREREckwIBERERHJMCARERERyfTr7QEQ0fXHZrdhf91+GFuMCBgQgJjgGLi6uPb2sIiIusypM0gbN25EVFQU1Go11Go1tFotSktLpfbW1lYsWrQIAwcOhKenJ5KSktDY2HjJPlNTU6FQKBwWnU7XYa3VasXo0aOhUChgMBgc2rZs2YLRo0fDw8MDISEhyM3NdWgvKSnB5MmT4evrK4199+7dzhw+EXVBybEShOaFYuKmiZhdMhsTN01EaF4oSo6V9PbQiIi6zKmAFBgYiJycHFRWVuKzzz7DpEmTMHXqVBw9ehQAsGzZMuzYsQNFRUWoqKhAQ0MDEhMTL9uvTqeD0WiUls2bN3dYt3z5cgwZMqTd+tLSUsyZMwfp6ek4cuQINmzYgLVr1+LVV1+Vavbt24fJkydj165dqKysxMSJE3HfffehqqrKmSkgoksoOVaC5C3JqLfUO6w/YzmD5C3JDElE1GcohBDiajrw8fFBbm4ukpOT4evri4KCAiQnJwMAvvjiCwwfPhx6vR7jx4/vcPvU1FQ0Nzdj27Ztl9xPaWkpMjIy8Pe//x0jR45EVVUVRo8eDQCYPXs22traUFRUJNWvX78eq1evRl1dHRQKRYd9jhw5Eg888ACeeeaZLh+vxWKBRqOB2WyGWq3u8nZE1zub3YbQvNB24egiBRQIVAfixJIT/LiNiHqcs+/fV3yRts1mQ2FhIc6dOwetVovKykq0tbUhLi5OqomMjERwcDD0ev0l+yovL4efnx8iIiKwcOFCNDU1ObQ3NjYiLS0Nb731Fjw8PNptb7Va4e7u7rCuf//+qK+vx6lTpzrcp91uR0tLC3x8fC45NqvVCovF4rAQUXv76/Z3Go4AQEDgtOU09tft78FRERFdGacDUnV1NTw9PaFSqZCeno6tW7dixIgRMJlMUCqV8PLycqgfPHgw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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "# We can now plot our ``GeoDataFrame``.\n",
    "geojson_gdf.plot(color='green')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
